package Server.TechnicalServices.Mapper;

import java.util.ArrayList;

import EntityCondivise.ELineaFattura;
import Server.Entity.Dominio.EFattura;
import Server.Entity.Dominio.ELineaRegola;
import Server.Entity.IceClasses.EFatturaI;

public class MFattura implements Mapper {

	@Override
	public EFatturaI getIceObj(Object hibObj) {

		EFatturaI iceFattura = null;
		MMoney moneyMapper = new MMoney();
		MProgetto progettoMapper = new MProgetto();
		MLineaProgetto lineaMapper = new MLineaProgetto();
		MLineaRegola regolaMapper = new MLineaRegola();			
		
		if ( hibObj instanceof EFattura)
		{
			iceFattura = new EFatturaI();
			iceFattura.regoleFattura= new ArrayList<EntityCondivise.ELineaFattura>();
			
			iceFattura.id = ((EFattura) hibObj).getId();
			
			iceFattura.dataEmissione = ((EFattura) hibObj).getDataEmissione();
			
			iceFattura.totale = moneyMapper.getIceObj( ((EFattura) hibObj).getTotale() );
			iceFattura.progetto = progettoMapper.getIceObj( ((EFattura) hibObj).getProgetto() );
			
			iceFattura.lineaFattura = lineaMapper.getIceObj( ((EFattura) hibObj).getLineeFattura() );
			
			for( ELineaRegola hibLine: ((EFattura) hibObj).getRegoleFattura() )
				iceFattura.regoleFattura.add( regolaMapper.getIceObj(hibLine) );
		}
		
		return iceFattura;
	}

	@Override
	public EFattura getHibObj(Object iceObj) {

		EFattura hibFattura = null;
		MMoney moneyMapper = new MMoney();
		MProgetto progettoMapper = new MProgetto();
		MLineaProgetto lineaMapper = new MLineaProgetto();
		MLineaRegola regolaMapper = new MLineaRegola();			
		
		if ( iceObj instanceof EFatturaI)
		{
			hibFattura = new EFattura();
			hibFattura.setRegoleFattura(new ArrayList<Server.Entity.Dominio.ELineaRegola>());
			
			hibFattura.setId(((EFatturaI) iceObj).id);
			
			hibFattura.setDataEmissione(((EFatturaI) iceObj).dataEmissione);
			
			hibFattura.setTotale( moneyMapper.getHibObj( ((EFatturaI) iceObj).totale ));
			hibFattura.setProgetto(progettoMapper.getHibObj( ((EFatturaI) iceObj).progetto ));
			
			hibFattura.setLineeFattura( lineaMapper.getHibObj( ((EFatturaI) iceObj).lineaFattura ));
			
			for(ELineaFattura iceRule: ((EFatturaI) iceObj).regoleFattura)
				hibFattura.getRegoleFattura().add( regolaMapper.getHibObj(iceRule) );	
		}
		
		return hibFattura;	
	}
	
}
